package com.zjsru.plan2024.oneday;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: cookLee
 * @Date: 2024-01-10
 * 删除子串后的字符串最小长度
 * 你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。
 */
public class MinLength {
    /**
     * 主
     * \
     * 输入：s = "ABFCACDB"
     * 输出：2
     * 解释：你可以执行下述操作：
     * - 从 "ABFCACDB" 中删除子串 "AB"，得到 s = "FCACDB" 。
     * - 从 "FCACDB" 中删除子串 "CD"，得到 s = "FCAB" 。
     * - 从 "FCAB" 中删除子串 "AB"，得到 s = "FC" 。
     * 最终字符串的长度为 2 。
     * 可以证明 2 是可获得的最小长度。
     * \
     * @param args args
     */
    public static void main(String[] args) {
        MinLength minLength = new MinLength();
        String s = "ABFCACDB";
        System.out.println(minLength.minLength(s));
    }

    /**
     * 最小长度
     * 模拟栈
     * @param s s
     * @return int
     */
    public int minLength(String s) {
        List<Character> stack = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            stack.add(c);
            int len = stack.size();
            if(len >= 2){
                if((stack.get(len - 1) == 'B' && stack.get(len - 2) == 'A') || (stack.get(len - 1) == 'D' && stack.get(len - 2) == 'C')){
                    stack.remove(len - 1);
                    stack.remove(len - 2);
                }
            }
        }
        return stack.size();
    }

}
